#ifndef _PRIORITYQUEUE2_H_
#define _PRIORITYQUEUE2_H_

#include <vector>
#include <set>
#include <queue>
#include <assert.h>
#include "point.h"
#include <map>

template <typename T>
class BucketPrioQueue {

public:
  BucketPrioQueue(); 

  void clear() { 
    buckets.clear();
    count = 0;
    nextPop = buckets.end();
  }

  bool empty();
  void push(int prio, T t);
  T pop();
  
  int size() { return count; }
  int getNumBuckets() { return buckets.size(); }

  int getTopPriority(){
    return nextPop->first;
  }

private:
  int count;  // 表示点的数量
  typedef std::map<int, std::queue<T>> BucketType;
  BucketType buckets;                              // 定义了一个BucketType类型的变量buckets 它是std::map模板类的实例化对象
  typename BucketType::iterator nextPop;           // 定义一个名为nextPop的BucketType迭代器, typename关键字用于告诉编译器BucketType::iterator是一个类型名
};

#include "bucketedqueue.hxx"

#endif

